package com.QQ.service;

import com.QQ.qqcommon.Message;
import com.QQ.qqcommon.MessageType;
import com.QQ.qqcommon.User;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.InetAddress;
import java.net.Socket;

//该类完成用户登录验证，用户注册等功能
public class UserClientService {

    private User u=new User();//因为我们可能在其他地方使用user信息，因此作为成员属性
    //因为Socket在其他的地方使用，则作为成员属性
    private Socket socket;

    //判断用户是否合法
    public boolean checkUser(String userId,String pwd){
        boolean b=false;
        //创建User对象
        u.setUserId(userId);
        u.setPasswd(pwd);
        //连接服务器

        try {
            socket=new Socket(InetAddress.getByName("127.0.0.1"),9999);
            //得到objectOutPutStream对象
            ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
            oos.writeObject(u);//发送User对象

            //读取从服务器恢复的Message对象
            ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
            Message ms=(Message) ois.readObject();

            if (ms.getMesType().equals(MessageType.MESSAGE_LOGIN_SUCCEED)){//登录ok
                b=true;
                //创建一个服务区端保持通信->创建一个类ClientConnectServerThread
                //等待..
                ClientConnectServerThread clientConnectServerThread = new ClientConnectServerThread(socket);
                clientConnectServerThread.start();
                //这里为了后面的客户端的扩展，我们将线程放入到集合管理
                ManageClientConnectServerThread.addClientConnectServerThread(userId,clientConnectServerThread);
                b=true;
            }else{
            //如果登录失败了，不能启动服务器的线程，关闭socket
                socket.close();
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
        return b;
    }
    //向服务器端请求在线用户列表
    public void onlineFriendList(){
        //发送一个message，类型为MESSAGE_GET_ONLINE_FRIEND
        Message message=new Message();
        message.setMesType(MessageType.MESSAGE_GET_ONLINE_FRIEND);
        message.setSender(u.getUserId());
        //发送给服务端
        //应该得到当前线程的Socket 对应的ObjectOutputStream对象
        try {
            ClientConnectServerThread clientConnectServerThread=ManageClientConnectServerThread.getClientConnectServerThread(u.getUserId());
            //得到userId对应的线程对象
            Socket socket=clientConnectServerThread.getSocket();
            ObjectOutputStream oos = new ObjectOutputStream
                    (socket.getOutputStream());
            oos.writeObject(message);//发送一个message对象，询问用户在线
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}
